Peer-to-peer or P2P networks make use of the pooled resources of participating nodes including processing capabilities and communication bandwidth to facilitate a wide variety of services including file sharing and VoIP telephony. In the absence of central servers, particular P2P services may make use of “overlay networks” to optimise resource location. An overlay network comprises nodes connected by virtual links representing paths extending across possibly many physical links in the underlying network (e.g. the Internet). Each node in the overlay network maintains a routing table containing a set of links to certain other nodes within the overlay network. Resource requests are passed between nodes until they arrive at a node which is responsible for that resource.
Distributed Hash Tables (DHT) provide an efficient means for mapping resource names (“keys”) to locations within an overlay network. DHT makes use of a hashing algorithm to map keys, e.g. song titles, SIP URIs, etc, to a finite value space, e.g. 128 bits. The hashing algorithm is chosen to ensure a relatively uniform spread of hash values across the value space. Thus, for example, the hashing of 100 song titles will likely result in 100 hash values that are relatively evenly spaced across the value space. Nodes within an overlay network are identified by usernames, which are themselves hashed into respective hash values. Each node then becomes responsible for a set of hash values within the value space which neighbour its own value. In practice, a node will store locations (e.g. IP addresses) from which resources, matching resource names which it “owns”, can be obtained. When a node in the overlay network receives a request for a resource, the node determines whether or not it owns the corresponding hash value. If so, it returns the location of the resource to the requester (via the overlay network). If it does not own the hash value, it inspects its routing table to identify that node within the table which has a hash value closest to the hash value of the request, and forwards the request to that node. The receiving node repeats the procedure, and so on until the request arrives at the node which does own the hash value corresponding to the request and which therefore knows the resource location.
FIG. 1 illustrates an overlay network organised as a ring (only a small number of the nodes within the ring are illustrated). In this example, each node maintains a routing table containing the locations and hash values of a small number of succeeding and preceding nodes in the ring, as well as for a small number of more distant nodes. In the illustrated network, a Node X maintains within its routing table locations for two successor nodes and two predecessor nodes, as well as for three remote nodes. Whilst a larger number of entries within the routing tables can make the network more efficient in terms of routing and more robust against node withdrawal, large tables are difficult to maintain and therefore increase the unreliability of the network.
A node within the overlay network ensures that the information in its routing table is up to date by attempting to contact its neighbours periodically. A number of different mechanisms may be used for this purpose:                1) A node can periodically send keep-alive messages to check that the other nodes listed in its routing table have not left the overlay network. This mechanism is used by DHT approaches such as Pastry [A. Rowstron and P. Druschel: Pastry: Scalable, distributed object location and routing for large-scale peer-to-peer systems. Middleware, 2001], Chord [I. Stoica, R. Morris, D. Karger, M. F. Kaashoek and H. Balakrishnan: Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications. In Proceedings of the ACM SIGCOMM'01 Conference, August 2001, San Diego, Calif., USA.] and Content Addressable Network (CAN) [S. Ratsanamy, P. Francis, M. Handley, R. Karp and S. Shenker: A scalable content-addressable network. In Proceedings of ACM SIGCOMM 2001, August 2001].        2) A node can periodically send queries to learn about new nodes that could be inserted into the routing table, replacing old entries (e.g. Chord).        3) A node can periodically send queries to its direct neighbours requesting information about the entries in its neighbours' routing tables. This information is used to update the node's own routing table (e.g. Chord).        4) A node can periodically send its own routing table to its neighbours (e.g. CAN).        
Another (additional) approach to maintaining the routing tables involves a node checking whether the originator of a resource request could be inserted into its routing table (e.g. Kademlia [P. Maymounkov and D. Mazieres: Kademlia: A peer-to-peer information system based on the xor metric. In Proceedings of IPTPS02, Cambridge, USA, March 2002]).
Consider FIG. 2 which shows an example of neighbourhood relations in a DHT. In the Figure, a ring topology is assumed. Node X maintains three successors and three predecessor pointers in its routing table. It should already be clear that the reason for maintaining multiple successor and predecessor pointers is to increase robustness. If the probability that a single successors will fail is p, then the probability that all three successors will fail simultaneously is p3. However, in extremely large real-world DHT-based overlay networks, this is not sufficient to maintain connectivity in the network; if all three successors (or alternatively, all three predecessors) of a given node leave the network within a sufficiently short period of time, the network fragments.
Nodes can leave the network either gracefully or ungracefully. When leaving gracefully, a node informs its neighbours about its intention to leave the network prior to actually leaving. The node does this by sending a Leave message (understood at the application layer). This allows the neighbours to immediately remove the leaving node from their routing tables. When a node leaves the network ungracefully, it exits the network without first informing its neighbours. Therefore, the neighbours must detect for themselves that the node has left. Reasons for ungraceful leaving include the following: (i) the node has crashed, (ii) the P2P application has crashed or has been closed down unexpectedly, and (iii) selfish behaviour. In alternative (iii), a user may choose to leave ungracefully in order to avoid delays inherent in a graceful departure.
In the case of an ungraceful departure from the overlay network, nodes can learn that a neighbour has left in two different ways:                1) When the underlying transport protocol is reliable (e.g. TCP), the departure of a neighbour is detected quickly from the fact that the transport layer connection goes down.        2) When the transport protocol is unreliable (e.g. UDP), a node does not learn that the neighbour has left until it attempts to send the next periodic DHT maintenance message to the neighbour. In addition to waiting for the transmission of the next periodic maintenance message, the node also has to wait until the transaction times out before it can be certain that the neighbour has really left.        
In the case of both graceful and ungraceful departure, the end result is that each of the leaving node's direct neighbours has one pointer less in its routing table. For instance, if node S1 in FIG. 1 leaves the network, Node X only has two successor pointers left, namely S2 and S3. If also S2 and S3 also leave the network before Node X has a chance to find additional successors, the overlay network becomes partitioned since Node X no longer knows any successors. A similar situation can arise in respect of the predecessor nodes of Node X.
Thus, a problem with existing solutions is that if all of the successors or predecessors of a given node fail within a short period of time, the network can become partitioned, and resource requests cannot bridge the gap. This “short period of time” refers to the time between two consecutive DHT maintenance messages. If such maintenance messages are sent for instance every 60 seconds, then the overlay network is disrupted if all the successors or predecessors of even a single node leave the overlay network within this 60 second period. This is not an unlikely event if the network is experiencing a high “churn” rate. Whilst an intuitive solution to this problem would be to send DHT maintenance messages more frequently, the interval between periodic maintenance messages cannot be made arbitrarily small as the resulting signalling load would overload the network. This problem has been confirmed by S. Rhea, D. Geels, T. Roscoe and J. Kubiatowicz: Handling Churn in a DHT, In Proceedings of the USENIX Annual Technical Conference, June 2004.